using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._BusinessAnalystTools._TradeAreas
{
    /// <summary>
    /// <para>Generate Trade Area Rings</para>
    /// <para>Creates rings around point locations.</para>
    /// <para>在点位置周围创建环。</para>
    /// </summary>    
    [DisplayName("Generate Trade Area Rings")]
    public class GenerateTradeAreaRings : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateTradeAreaRings()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The input features containing the center points for the rings.</para>
        /// <para>包含环中心点的输入要素。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The feature class that will contain the output ring features.</para>
        /// <para>将包含输出环要素的要素类。</para>
        /// </param>
        public GenerateTradeAreaRings(object _in_features, object _out_feature_class)
        {
            this._in_features = _in_features;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "Business Analyst Tools";

        public override string ToolName => "Generate Trade Area Rings";

        public override string CallName => "ba.GenerateTradeAreaRings";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_features, _out_feature_class, _radii, _units, _id_field, _remove_overlap.GetGPValue(), _dissolve_option.GetGPValue(), _input_method.GetGPValue(), _expression];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input features containing the center points for the rings.</para>
        /// <para>包含环中心点的输入要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The feature class that will contain the output ring features.</para>
        /// <para>将包含输出环要素的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Distances</para>
        /// <para>The distances, in ascending size, used to create rings around the input features.</para>
        /// <para>距离（按升序排列）用于在输入要素周围创建环。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distances")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _radii { get; set; } = null;


        /// <summary>
        /// <para>Distance Units</para>
        /// <para>The linear unit to be used with the distance values.</para>
        /// <para>要与距离值一起使用的线性单位。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distance Units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _units { get; set; } = null;


        /// <summary>
        /// <para>ID Field</para>
        /// <para>A unique ID field in the ring center layer.</para>
        /// <para>环中心图层中的唯一 ID 字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _id_field { get; set; } = null;


        /// <summary>
        /// <para>Remove Overlap</para>
        /// <para><xdoc>
        ///   <para>Creates overlapping concentric rings or removes overlap.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Thiessen polygons are used to remove overlap between output ring polygons.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Output ring features are created with overlap. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>创建重叠的同心环或删除重叠。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 泰森面用于消除输出环形面之间的重叠。</bullet_item><para/>
        ///     <bullet_item>未选中 - 创建具有重叠的输出环要素。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Remove Overlap")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _remove_overlap_value _remove_overlap { get; set; } = _remove_overlap_value._false;

        public enum _remove_overlap_value
        {
            /// <summary>
            /// <para>REMOVE_OVERLAP</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REMOVE_OVERLAP")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>KEEP_OVERLAP</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("KEEP_OVERLAP")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Dissolve Option</para>
        /// <para><xdoc>
        ///   <para>Specifies whether overlapping or nonoverlapping service areas for a single location will be used when multiple distances are specified.</para>
        ///   <bulletList>
        ///     <bullet_item>Overlap—Each polygon will include the area reachable from the facility up to the distance value. This is the default.</bullet_item><para/>
        ///     <bullet_item>Split—Each polygon will include only the area between consecutive distance values.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定指定多个距离时，是使用单个位置的重叠服务区还是非重叠服务区。</para>
        ///   <bulletList>
        ///     <bullet_item>重叠 - 每个面将包括从设施点可到达的区域直至距离值。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>分割—每个面将仅包括连续距离值之间的面积。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Dissolve Option")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _dissolve_option_value _dissolve_option { get; set; } = _dissolve_option_value._OVERLAP;

        public enum _dissolve_option_value
        {
            /// <summary>
            /// <para>Overlap</para>
            /// <para>Overlap—Each polygon will include the area reachable from the facility up to the distance value. This is the default.</para>
            /// <para>重叠 - 每个面将包括从设施点可到达的区域直至距离值。这是默认设置。</para>
            /// </summary>
            [Description("Overlap")]
            [GPEnumValue("OVERLAP")]
            _OVERLAP,

            /// <summary>
            /// <para>Split</para>
            /// <para>Split—Each polygon will include only the area between consecutive distance values.</para>
            /// <para>分割—每个面将仅包括连续距离值之间的面积。</para>
            /// </summary>
            [Description("Split")]
            [GPEnumValue("SPLIT")]
            _SPLIT,

        }

        /// <summary>
        /// <para>Input Method</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of value that is to be used for each drive time.</para>
        ///   <bulletList>
        ///     <bullet_item>Values—Uses a constant value (all trade areas will be the same size). This is the default.</bullet_item><para/>
        ///     <bullet_item>Expression—The values from a field or an expression (trade areas can be a different size).</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定要用于每个行驶时间的值的类型。</para>
        ///   <bulletList>
        ///     <bullet_item>值 - 使用常量值（所有贸易区域的大小相同）。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>表达式 - 字段或表达式中的值（贸易区域可以是不同的大小）。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Method")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _input_method_value _input_method { get; set; } = _input_method_value._VALUES;

        public enum _input_method_value
        {
            /// <summary>
            /// <para>Values</para>
            /// <para>Values—Uses a constant value (all trade areas will be the same size). This is the default.</para>
            /// <para>值 - 使用常量值（所有贸易区域的大小相同）。这是默认设置。</para>
            /// </summary>
            [Description("Values")]
            [GPEnumValue("VALUES")]
            _VALUES,

            /// <summary>
            /// <para>Expression</para>
            /// <para>Expression—The values from a field or an expression (trade areas can be a different size).</para>
            /// <para>表达式 - 字段或表达式中的值（贸易区域可以是不同的大小）。</para>
            /// </summary>
            [Description("Expression")]
            [GPEnumValue("EXPRESSION")]
            _EXPRESSION,

        }

        /// <summary>
        /// <para>Distance Expression</para>
        /// <para>A fields-based expression to calculate the radii.</para>
        /// <para>用于计算半径的基于字段的表达式。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distance Expression")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _expression { get; set; } = null;


        public GenerateTradeAreaRings SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}